using System;
using System.Windows.Forms;
using App.Controlador;
using App.Modelo;
using App.Modelo.Attributes;

namespace App.Seguridad.Vista.Forms
{
    [Formulario("ClaveAcceso")]
    public partial class CambioClave : Form
    {
        private ControladoraUsuarios _controladoraUsuarios;
        private ModoFormularioABM _modo = ModoFormularioABM.Modificacion;

        private Usuario _usuario;

        public CambioClave()
        {
            InitializeComponent();
        }

        public ModoFormularioABM Modo
        {
            get { return _modo; }
            set
            {
                _modo = value;
                switch (value)
                {
                    case ModoFormularioABM.Alta:
                        label2.Enabled = actual.Enabled = false;
                        break;
                    case ModoFormularioABM.Modificacion:
                        label2.Enabled = actual.Enabled = true;
                        break;
                }
            }
        }

        public Usuario Usuario
        {
            get { return _usuario ?? (_usuario = ModuloSeguridad.Instance.UsuarioActual); }
            set { _usuario = value; }
        }

        public ControladoraUsuarios ControladoraUsuarios
        {
            get
            {
                return _controladoraUsuarios ??
                       (_controladoraUsuarios =
                        ModuloSeguridad.Instance.FabricaControladoras.Factory<ControladoraUsuarios>());
            }
            set { _controladoraUsuarios = value; }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            if (nueva.Text != nueva1.Text)
            {
                MessageBox.Show("La clave reingresada no coincide");
                return;
            }

            try
            {
                switch (Modo)
                {
                    case ModoFormularioABM.Ver:
                        break;
                    case ModoFormularioABM.Alta:
                        ControladoraUsuarios.UpdateClaveUsuario(Usuario, nueva.Text);
                        MessageBox.Show(
                            "Se establecio una nueva clave",
                            Text,
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information
                            );
                        DialogResult = DialogResult.OK;
                        Close();
                        break;
                    case ModoFormularioABM.Modificacion:
                        ControladoraUsuarios.UpdateClaveUsuario(Usuario, actual.Text, nueva.Text);

                        MessageBox.Show(
                            "Se modifico la clave",
                            Text,
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information
                            );
                        DialogResult = DialogResult.OK;
                        Close();
                        break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    ex.Message,
                    Text,
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation
                    );
            }
        }

        [Comando("alta", "Modifica la clave de acceso del usario")]
        public void Alta()
        {
            Modo = ModoFormularioABM.Alta;
            ModuloSeguridad.Instance.AbrirFormulario(this);
        }

        [Comando("modificar", "Modifica la clave de acceso del usario")]
        public void Modificar()
        {
            Modo = ModoFormularioABM.Modificacion;
            ModuloSeguridad.Instance.AbrirFormulario(this);
        }


        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }
    }
}